package org.ladybug.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.ladybug.dao.DAOService;
import org.ladybug.dao.persistence.InfoUtente;
import org.ladybug.dao.persistence.Utente;
import org.ladybug.service.SearchService;
import org.ladybug.web.controller.model.ModelUtente;
import org.springframework.validation.BindException;

public class UtenteSearchService implements SearchService {
	
	private DAOService daoService ;
	
	public static final String NICKNAME = "NICKNAME";
	
	public Object find(BindException errors, Map params) {
		List<Utente> result=null;
		if(params==null){
			params = new HashMap<String, String>();
		}
		if(params.size()>0){
			
			String nickname = (String) params.get(NICKNAME);
			Utente utente = new Utente();
			utente.setNickname(nickname);
			DetachedCriteria criteria = DetachedCriteria.forClass(Utente.class);
			Criterion criterionNickname = Restrictions.ilike("nickname", nickname);
			criteria.add(criterionNickname);
			result = daoService.findByCriteria(criteria);
		}
		else{
			result = daoService.loadAll(Utente.class);
		}
		Iterator<Utente> utentiIterator = result.iterator();
		List<ModelUtente> listaUtenti = new ArrayList<ModelUtente>();
		while (utentiIterator.hasNext()) {
			Utente u =utentiIterator.next();
			ModelUtente uc = new ModelUtente();
			uc.setNickname(u.getNickname());
			InfoUtente iu = (InfoUtente) daoService.load(InfoUtente.class, u.getIdUtente());
			uc.setNome(iu.getNome());
			uc.setCognome(iu.getCognome());
			uc.setDataNascita(iu.getDataNascita());
			uc.setEmail(iu.getEmail());
			uc.setSospeso(u.isIsSospeso());
			listaUtenti.add(uc);
		}
		return listaUtenti;
	}
	public DAOService getDaoService() {
		return daoService;
	}
	public void setDaoService(DAOService daoService) {
		this.daoService = daoService;
	}

}
